from estadoFase import EstadoFase, db_session
from sqlalchemy import exc
from flask import flash
from atributoTipo import AtributoTipo, atributotipo
session = db_session()

class AtributoItemManager(object):
    """Clase encargada del manejo de los atributos de un item"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<AtributoItem Manager>'
    
    def guardarAtributoItem(self, atributoItem):
        """
        Metodo encargado de almacenar un atributo item en la base de datos
        @param atributoItem: Objeto atributo item que se desea guardar.
        """
        session.add(atributoItem)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El atributo ya existe", "error")
        else:
            return flash("Atributo item registrado exitosamente")
#        session.close()
        
    def eliminarAtributoItem(self, idatributoitem):
        """
        Metodo encargado de eliminar un atributo item de la base de datos
        @param idatributoitem: id del atributo item que se desea eliminar.
        """
        atributoItem = session.query(AtributoItem).filter(AtributoItem.idatributoitem == idatributoitem).first()
        session.delete(atributoItem)
        session.commit()
        
    def getAtributoItem(self, idatributoitem):
        """
        Metodo encargado de retornar un atributo item dado su idatributoitem
        @param idatributoitem: id del atributo item que se desea obtener.
        """
        atributoItem = session.query(AtributoItem).filter(AtributoItem.idatributoitem == idatributoitem).first()
        return atributoItem
    
    def getAtributosItem(self):
        """Metodo encargado de retornar todos los atributos item"""
        atributoItem = session.query(AtributoItem)
        return atributoItem
    
    def getAtributosItemFiltradoPorCampo(self, campo):
        """
        Metodo encargado de retornar un atributo item dado su nombre
        @param campo: nombre del atributo item que se desea obtener.
        """
        if campo == "":
            campo = "%"
        else:
            campo = "%" + campo + "%"
        atributoItem = session.query(AtributoItem).filter(AtributoItem.campo.like(campo))
        return atributoItem
    
    def getAtributoTipoPorCampo(self, campo):
        """
        Metodo encargado de retornar el tipo de campo de un atributo item dado su nombre
        @param campo: nombre del atributo item que se desea obtener.
        """
        atributoTipo = session.query(AtributoTipo).filter(AtributoTipo.campo == campo).first()
        return atributoTipo
    